/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.academik.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import org.academik.util.HibernateUtil;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.StatelessSession;

/**
 *
 * @author kerberoz
 */
@ManagedBean(name = "autoCompleteBean")
@ViewScoped
public class AutoCompleteBean implements Serializable {

    /** Creates a new instance of AutoCompleteBean */
    public AutoCompleteBean() {
    }

    public List<String> completeNombre(String query) {
        List<String> results = new ArrayList<String>();
        String sexo = (String) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("field");
        StatelessSession session = HibernateUtil.getSessionFactory().openStatelessSession();
        String sql = "SELECT CONCAT_WS(' ',p.vcNombres,p.vcApellidos) FROM persona p "
                + "WHERE CONCAT_WS(' ',p.vcNombres,p.vcApellidos) "
                +"LIKE :valor "
                + "AND (p.boPadre = TRUE OR p.boResponsable = TRUE) "                
                + "AND (p.vcSexo != :sexo OR p.vcSexo IS NULL) "
                //+ "GROUP BY CONCAT_WS(' ',p.vcNombres,p.vcApellidos) "
                + "ORDER BY p.idPersona ASC "
                + "LIMIT 20";  /* <-- Le dejo la condicion asi porque al responsable
                                              * no lo filtro por sexo como al Padre o la Madre el responsable 
                                              * puede ser de cualquier sexo
                                              * y para ese caso el sexo sera igual a vacio ('') 
                                              * es decir no importa el sexo muestre todos
                                              * los resultados x eso es que en las vistas el attribute 
                                              * 'field' es a la inversa
                                              */
        Query hQuery = session.createSQLQuery(sql);
        hQuery.setParameter("valor", "%" + query + "%");
        hQuery.setParameter("sexo", sexo);
        results = hQuery.list();
        session.close();
        return results;
    }
    
    public List<String> completeNombreAlumno(String query) {
        List<String> results = new ArrayList<String>();
        StatelessSession session = HibernateUtil.getSessionFactory().openStatelessSession();
        String sql = "SELECT CONCAT_WS(' ',p.vcNombres,p.vcApellidos) FROM persona p "
                + "WHERE CONCAT_WS(' ',p.vcNombres,p.vcApellidos) "
                + "LIKE :valor "
                + "AND (p.boAlumno = true) "
                //+ "GROUP BY CONCAT_WS(' ',p.vcNombres,p.vcApellidos)"
                + "LIMIT 10 ";
        Query hQuery = session.createSQLQuery(sql);
        hQuery.setParameter("valor", "%" + query + "%");
        results = hQuery.list();
        session.close();
        return results;
    }
    
        public List<String> completeInstitucion(String query) {
        List<String> results = new ArrayList<String>();
        StatelessSession session = HibernateUtil.getSessionFactory().openStatelessSession();
        String sql = "SELECT REPLACE(a.vcInstProcedencia, '\"','') FROM alumno a "
                + "WHERE REPLACE(a.vcInstProcedencia, '\"','') LIKE :valor "
                + "GROUP BY REPLACE(a.vcInstProcedencia, '\"','') "
                + "ORDER BY REPLACE(a.vcInstProcedencia, '\"','') ASC LIMIT 10";
        Query hQuery = session.createSQLQuery(sql);
        hQuery.setParameter("valor", "%" + query + "%");
        results = hQuery.list();
        session.close();
        return results;
    }
}
